package javaExer.InnerClass;

public class 成员内部类 {
    public static void main(String[] args) {

        //外部其他类访问 成员内部类
        //方式一
        Outer02 outer02 = new Outer02();
        Outer02.Inner inner = outer02.new Inner();
        inner.m1();

        //方式二
        Outer02.Inner inner1 = new Outer02().new Inner();
        inner1.m1();

        //方式三
        Outer02.Inner inner2 = outer02.getInner();
        inner2.m1();


    }
}

class Outer02{
    private int n1 = 100;
    //成员内部类是在 外部类的成员位置的
    //可以有任意的修饰符，因为它的地位是 外部类的属性
    //可以访问外部类的所有成员，包含私有的
    //成员内部类的作用域是整个类
    //外部其他类访问：创建对象，再访问
    public class Inner{
        //如果访问的属性和外部类的属性相同时，默认遵守就近原则，如果需要访问外部类的属性 则可以(外部类名.this.属性名)
        private int n1 = 18;
        public void m1(){
            System.out.println("外部类 n1=" + Outer02.this.n1);
        }
    }

    public Inner getInner(){
        return new Inner();
    }
}